package com.boarsoft.boar.app;

import com.boarsoft.bean.ReplyInfo;
import com.boarsoft.boar.entity.AppInfo;
import com.boarsoft.boar.entity.DirInfo;
import com.boarsoft.common.dao.PagedResult;
import com.boarsoft.hibernate.biz.SimpleBiz;

public interface AppBiz extends SimpleBiz {
	/**
	 * 查询现有AppInfo
	 *
	 * @param dirId-目录id
	 * @param projId-工程id
	 * @param code-工程编号
	 * @param name-工程名称
	 * @param key-查询关键字
	 * @param orderBy-排序条件
	 * @param pageNo-页编号
	 * @param pageSize-页大小
	 * @return PagedResult<AppInfo>
	 */
	PagedResult<AppInfo> list(String dirId, String projId, String code, String name, String key, String orderBy, int pageNo,
			int pageSize);

	/**
	 * 保存应用，因为已在目录树中查了重，这里不需要再查
	 *
	 * @param d
	 *            DirInfo
	 * @param a
	 *            AppInfo
	 * @return
	 */
	ReplyInfo<Object> add(DirInfo d, AppInfo a);

	/**
	 * 删除某个应用，需同步删除目录
	 *
	 * @param id-应用id
	 */
	void delete(String id);

	/**
	 * 更新某个应用的信息
	 *
	 * @param d
	 *            DirInfo
	 * @param a
	 *            AppInfo
	 */
	void update(DirInfo d, AppInfo a);

	/**
	 * 获取应用信息
	 *
	 * @param id-应用id
	 * @return AppInfo
	 */
	AppInfo get(String id);

	/**
	 * 启用应用
	 *
	 * @param id-应用id
	 * @return boolean
	 */
	boolean start(String id);

	/**
	 * 停用应用
	 *
	 * @param id-应用id
	 * @return boolean
	 */
	boolean stop(String id);

	/**
	 * 复制ID为sourceId的节点到ID为parentId的节点下
	 *
	 * @param sourceId
	 *            被拷贝的节点的ID
	 * @param parentId
	 *            目标节点（新节点的父节点）
	 * @param newId
	 *            新节点的ID（需要与DirInfo一致）
	 * @return
	 */
	String copy(String sourceId, String parentId, String newId);

	/**
	 *
	 * @param code
	 *            AppInfo.code
	 * @return
	 */
	AppInfo find(String code);

	/**
	 * 根据应用编号和版本号查询AppInfo
	 * 
	 * @param code
	 * @param ver
	 * @return
	 */
	AppInfo find(String code, String ver);

	/**
	 * 获取应用信息
	 *
	 * @param code
	 *            * AppInfo.code
	 * @param projId
	 *            AppInfo.projId
	 * @return AppInfo
	 */
	AppInfo find2(String code, String projId);
}
